build: Clean up Wayland protocol code generation
authorEmmanuele Bassi <ebassi@gnome.org>
Wed, 26 Apr 2017 14:16:21 +0000 (15:16 +0100)
committerEmmanuele Bassi <ebassi@gnome.org>
Wed, 3 May 2017 14:10:57 +0000 (15:10 +0100)
We can build the name of the input and output files for the Wayland
protocols we use from the protocol name, stability, and version. This is
similar to how the autotools build does it, except much more clear and
without shelling out twice to sed just to resolve the Makefile rule.

gdk/wayland/genprotocolfiles.py
gdk/wayland/meson.build

index 187f8ff8d74cf673f1fa1f921679d8b6273051d1..cf4faed78f5a49a1f28c64bf3c213b8e05046f4f 100755 (executable)
@@ -12,9 +12,7 @@ out_file = sys.argv[3]
 #TODO: We can infer this optinon from the name of the output file!
 option   = sys.argv[4]
 
-
-
-pc = subprocess.Popen([scanner, option , in_file , out_file], stdout=subprocess.PIPE)
+pc = subprocess.Popen([scanner, option, in_file, out_file], stdout=subprocess.PIPE)
 (stdo, _) = pc.communicate()
 if pc.returncode != 0:
     sys.exit(pc.returncode)
@@ -24,7 +22,7 @@ content = ""
 with open(out_file, 'r') as content_file:
     content = content_file.read()
 
-content = content.replace("WL_EXPORT", "")
+content = content.replace('WL_EXPORT ', '')
 ofile = open(out_file, 'w')
 ofile.write(content)
 ofile.close()
index f5e894cea959c816a2fc97ece9d1ef44c9102c50..ff5674f0e852c434256ddc7097da0972f75ede2e 100644 (file)
@@ -37,53 +37,67 @@ gdk_wayland_deps = [
 ]
 
 # wayland protocols
-
 proto_dir = dependency('wayland-protocols').get_pkgconfig_variable('pkgdatadir')
 assert(proto_dir != '', 'Could not get pkgdatadir from wayland-protocols.pc')
 
 wayland_scanner = find_program('wayland-scanner')
 genprotocols = find_program('genprotocolfiles.py')
 
+# Format:
+#  - protocol name
+#  - protocol stability ('stable' or 'unstable')
+#  - protocol version (if stability is 'unstable')
 proto_sources = [
-  ['gtk-shell',
-   'protocol/gtk-shell.xml'],
-
-  ['gtk-primary-selection',
-   'protocol/gtk-primary-selection.xml'],
-
-  ['pointer-gestures-unstable-v1',
-   join_paths(proto_dir, 'unstable/pointer-gestures/pointer-gestures-unstable-v1.xml')],
-
-  ['xdg-shell-unstable-v6',
-   join_paths(proto_dir, 'unstable/xdg-shell/xdg-shell-unstable-v6.xml')],
-
-  ['xdg-foreign-unstable-v1',
-   join_paths(proto_dir, 'unstable/xdg-foreign/xdg-foreign-unstable-v1.xml')],
-
-  ['tablet-unstable-v2',
-   join_paths(proto_dir, 'unstable/tablet/tablet-unstable-v2.xml')],
+  ['gtk-shell', 'stable', ],
+  ['gtk-primary-selection', 'stable', ],
+  ['pointer-gestures', 'unstable', 'v1', ],
+  ['xdg-shell', 'unstable', 'v6', ],
+  ['xdg-foreign', 'unstable', 'v1', ],
+  ['tablet', 'unstable', 'v2', ],
 ]
 
 gdk_wayland_gen_headers = []
 
-# FIXME: there's some protostability/protoname stuff in Makefile.am I don't grok
-foreach p : proto_sources
-  output_base = p[0]
-  input = p[1]
+foreach p: proto_sources
+  proto_name = p.get(0)
+  proto_stability = p.get(1)
+
+  if proto_stability == 'stable'
+    output_base = proto_name
+    input = 'protocol/@0@.xml'.format(proto_name)
+  else
+    proto_version = p.get(2)
+    output_base = '@0@-@1@-@2@'.format(proto_name, proto_stability, proto_version)
+    input = join_paths(proto_dir, '@0@/@1@/@2@.xml'.format(proto_stability, proto_name, output_base))
+  endif
 
   gdk_wayland_gen_headers += custom_target('@0@ client header'.format(output_base),
-    input : input,
-    output : '@0@-client-protocol.h'.format(output_base),
-    command: [genprotocols, wayland_scanner, '@INPUT@', '@OUTPUT@', 'client-header'])
+                                           input: input,
+                                           output: '@0@-client-protocol.h'.format(output_base),
+                                           command: [
+                                             genprotocols,
+                                             wayland_scanner,
+                                             '@INPUT@', '@OUTPUT@',
+                                             'client-header',
+                                           ])
 
   gdk_wayland_sources += custom_target('@0@ source'.format(output_base),
-    input : input,
-    output : '@0@-protocol.c'.format(output_base),
-    command: [genprotocols, wayland_scanner, '@INPUT@', '@OUTPUT@', 'code'])
+                                       input: input,
+                                       output: '@0@-protocol.c'.format(output_base),
+                                       command: [
+                                         genprotocols,
+                                         wayland_scanner,
+                                         '@INPUT@', '@OUTPUT@',
+                                         'code',
+                                       ])
 endforeach
 
 libgdk_wayland = static_library('gdk-wayland',
-  gdk_wayland_sources, gdk_wayland_gen_headers, gdkconfig, gdkenum_h,
-  include_directories: [confinc, gdkinc],
-  c_args: ['-DGDK_COMPILATION', '-DG_LOG_DOMAIN="Gdk"'],
-  dependencies: [gdk_deps, gdk_wayland_deps])
+                                gdk_wayland_sources, gdk_wayland_gen_headers, gdkconfig, gdkenum_h,
+                                include_directories: [ confinc, gdkinc, ],
+                                c_args: [
+                                  '-DGDK_COMPILATION',
+                                  '-DG_LOG_DOMAIN="Gdk"',
+                                  '-DG_LOG_USE_STRUCTURED=1',
+                                ],
+                                dependencies: [ gdk_deps, gdk_wayland_deps, ])